package com.bestcem.xm.ticket.entity.mongo;

import com.bestcem.xm.ticket.constant.ColumnConstant;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.*;

import java.io.Serializable;
import java.util.List;

/**
 * 工单内容详情模板表
 * 问卷项目->开启提醒->工单规则->具体工单规则->工单内容
 * 一个工单规则配置对应一条工单内容模板
 *
 * @author XiaoYunSong <ys.xiao@idiaoyan.com>
 * @version v1.0
 * @date 2021/8/10 16:13
 */
@ToString(callSuper = true)
@Getter
@Setter
public class TicketTemplate extends BaseEntity {

    private static final long serialVersionUID = -7253778583948098509L;

    /**
     * orgId
     */
    @JsonProperty(value = ColumnConstant.TicketTemplate.ORG_ID)
    private String orgId;

    /**
     * ticketConfigId
     */
    @JsonProperty(value = ColumnConstant.TicketTemplate.TICKET_CONFIG_ID)
    private String ticketConfigId;

    /**
     * category
     */
    @JsonProperty(value = ColumnConstant.TicketTemplate.CATEGORY)
    private Integer category;

    /**
     * customFieldLimit
     */
    @JsonProperty(value = ColumnConstant.TicketTemplate.CUSTOM_FIELD_LIMIT)
    private Integer customFieldLimit;

    /**
     * defaultFields
     * <p>
     * 这个字段我不知道怎么写, python里面是 dict 类型, 但是库里数据的格式不一样, 所以我不知道到底是个什么样子
     * 沟通记录: @赵明: 这个是历史字段了，不用了，现在用下面的 customFields，这个的类型应该是和 customFields 是一样的
     */
    @JsonProperty(value = ColumnConstant.TicketTemplate.DEFAULT_FIELDS)
    private List<FieldInfo> defaultFields;

    /**
     * customFields
     * <p>
     * 这个字段我不知道怎么写, python里面是 dict 类型, 但是库里数据的格式不一样, 所以我不知道到底是个什么样子
     * 沟通记录: @赵明: 这个的类型应该是和 defaultFields 是一样的
     */
    @JsonProperty(value = ColumnConstant.TicketTemplate.CUSTOM_FIELDS)
    private List<FieldInfo> customFields;

    /**
     * 是否sample
     */
    @JsonProperty(value = ColumnConstant.TicketTemplate.SAMPLE)
    private boolean sample;


    @NoArgsConstructor
    @AllArgsConstructor
    @Data
    public static class FieldInfo implements Serializable {
        private static final long serialVersionUID = 2808726620840986656L;

        /**
         * field
         */
        @JsonProperty(value = ColumnConstant.TicketTemplate.FieldInfo.FIELD)
        private String field;

        /**
         * text
         */
        @JsonProperty(value = ColumnConstant.TicketTemplate.FieldInfo.TEXT)
        private String text;

        /**
         * type
         */
        @JsonProperty(value = ColumnConstant.TicketTemplate.FieldInfo.TYPE)
        private String type;

        /**
         * required
         * FIXME: 这个字段应该是 int, 但是库里有 bool 也有 int, 直接用 int/bool 接都会报错
         */
        @JsonProperty(value = ColumnConstant.TicketTemplate.FieldInfo.REQUIRED)
        private Object required;

        /**
         * options
         */
        @JsonProperty(value = ColumnConstant.TicketTemplate.FieldInfo.OPTIONS)
        private List<Option> options;


        @NoArgsConstructor
        @AllArgsConstructor
        @Data
        public static class Option implements Serializable {
            private static final long serialVersionUID = 2808726620840986656L;

            /**
             * text
             */
            @JsonProperty(value = ColumnConstant.TicketTemplate.FieldInfo.Option.TEXT)
            private String text;

            /**
             * value
             */
            @JsonProperty(value = ColumnConstant.TicketTemplate.FieldInfo.Option.VALUE)
            private Integer value;
        }
    }
}
